﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; 
using Tst.Models;
using Ext.Direct.Mvc;

namespace Tst.Controllers
{
    public class ProjetoController : Controller
    {
        private ProjetoRepository projetoRep;
        private UsuarioRepository usuarioRep;

        public ProjetoController()
        {
            this.projetoRep = new ProjetoRepository();
            this.usuarioRep = new UsuarioRepository();
        }
        
        public ActionResult List()
        {
            IList < Projeto > projetos = projetoRep.GetAll();
            IList<object> json = new List<object>();

            foreach(Projeto projeto in projetos)
            {
                projeto.ResponsavelReference.Load();

                json.Add(new { 
                     cd_projeto = projeto.cd_projeto
					,cd_responsavel = projeto.Responsavel.cd_usuario
					,ds_descricao = projeto.ds_descricao
					,ds_versao = projeto.ds_versao
					,ds_responsavel = projeto.Responsavel.ds_nome
					,ds_cliente = projeto.ds_cliente
                    ,dt_inicio = projeto.dt_inicio.ToString("dd/MM/yyyy")
                });
            }
            
            return this.Direct(json);
        }
        
        public ActionResult Create(Projeto pProjeto)
        {

            Projeto projeto = this.projetoRep.GetByDescricao(pProjeto.ds_descricao);

            if (projeto != null && projeto.cd_projeto != pProjeto.cd_projeto)
            {
                return this.Direct(new
                {
                    success = false,
                    errors = new
                    {
                        ds_projeto = "Projeto já existente!"
                    }
                });
            }

            if (pProjeto.cd_projeto == 0)
            {
                projeto = new Projeto()
                {
                    ds_descricao = pProjeto.ds_descricao,
                    ds_cliente = pProjeto.ds_cliente,
                    ds_versao = pProjeto.ds_versao,
                    dt_inicio = pProjeto.dt_inicio,
                    Responsavel = new Usuario(){ cd_usuario=pProjeto.Responsavel.cd_usuario }
                };

                this.projetoRep.Insert(projeto);
            }
            else 
            {

                projeto = this.projetoRep.GetById(pProjeto.cd_projeto);
                projeto.ResponsavelReference.Load();

                // altera responsavel
                if (projeto.Responsavel.cd_usuario != pProjeto.Responsavel.cd_usuario)
                {
                    projeto.Responsavel = usuarioRep.GetById(pProjeto.Responsavel.cd_usuario);
                }

                projeto.ds_cliente = pProjeto.ds_cliente;
                projeto.ds_descricao = pProjeto.ds_descricao;
                projeto.ds_versao = pProjeto.ds_versao;
                projeto.dt_inicio = pProjeto.dt_inicio;
                
                
                this.projetoRep.Update(projeto);
                       
            }

            this.projetoRep.Save();

            return this.Direct(new
            {
                success = true,
                cd_projeto = projeto.cd_projeto
            });


        }

        public ActionResult Delete(int cd_projeto)
        {
            this.projetoRep.Delete(cd_projeto);
            this.projetoRep.Save();

            return this.Direct(new { success = true });
        }
    }
}
